home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 February: Tool Chest / Dev.CD Feb 95 / Dev.CD Feb 95.toast / Tool Chest / Interfaces / Universal Interfaces 1.0 / CIncludes / Sound.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-06  |  23.4 KB  |  756 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        Sound.h
  3.  
  4.     Copyright:    © 1984-1993 by Apple Computer, Inc., all rights reserved.
  5.  
  6.     WARNING
  7.     This file was auto generated by the interfacer tool. Modifications
  8.     must be made to the master file.
  9.  
  10. */
  11.  
  12. #ifndef __SOUND__
  13. #define __SOUND__
  14.  
  15. #ifndef __TYPES__
  16. #include <Types.h>
  17. /*    #include <ConditionalMacros.h>                                */
  18. /*    #include <MixedMode.h>                                        */
  19. /*        #include <Traps.h>                                        */
  20. #endif
  21.  
  22. #define synthCodeRsrc 'snth'                /* Resource types used by Sound Manager */
  23. #define soundListRsrc 'snd '
  24.  
  25. #define kSoundHardwareType 'sdev'
  26.  
  27. #define twelfthRootTwo 1.05946309434
  28.  
  29. enum  {
  30.     swMode                        = -1,                            /*Sound Driver modes*/
  31.     ftMode                        = 1,
  32.     ffMode                        = 0,
  33.     rate44khz                    = (long)0xAC440000,                /*44100.00000 in fixed-point*/
  34.     rate22khz                    = (long)0x56EE8BA3,                /*22254.54545 in fixed-point*/
  35.     rate11khz                    = (long)0x2B7745D1,                /*11127.27273 in fixed-point*/
  36. /*synthesizer numbers for SndNewChannel*/
  37.     squareWaveSynth                = 1,                            /*square wave synthesizer*/
  38.     waveTableSynth                = 3,                            /*wave table synthesizer*/
  39.     sampledSynth                = 5,                            /*sampled sound synthesizer*/
  40. /*old Sound Manager MACE synthesizer numbers*/
  41.     MACE3snthID                    = 11,
  42.     MACE6snthID                    = 13,
  43.     kMiddleC                    = 60,                            /*MIDI note value for middle C*/
  44.     kSimpleBeepID                = 1,                            /*reserved resource ID for Simple Beep*/
  45.     kFullVolume                    = 0x0100,                        /*1.0, setting for full hardware output volume*/
  46.     kNoVolume                    = 0,                            /*setting for no sound volume*/
  47. /*command numbers for SndDoCommand and SndDoImmediate*/
  48.     nullCmd                        = 0,
  49.     initCmd                        = 1,
  50.     freeCmd                        = 2,
  51.     quietCmd                    = 3,
  52.     flushCmd                    = 4,
  53.     reInitCmd                    = 5,
  54.     waitCmd                        = 10,
  55.     pauseCmd                    = 11,
  56.     resumeCmd                    = 12,
  57.     callBackCmd                    = 13
  58. };
  59.  
  60. enum  {
  61.     syncCmd                        = 14,
  62.     availableCmd                = 24,
  63.     versionCmd                    = 25,
  64.     totalLoadCmd                = 26,
  65.     loadCmd                        = 27,
  66.     freqDurationCmd                = 40,
  67.     restCmd                        = 41,
  68.     freqCmd                        = 42,
  69.     ampCmd                        = 43,
  70.     timbreCmd                    = 44,
  71.     getAmpCmd                    = 45,
  72.     volumeCmd                    = 46,                            /*sound manager 3.0 or later only*/
  73.     getVolumeCmd                = 47,                            /*sound manager 3.0 or later only*/
  74.     waveTableCmd                = 60,
  75.     phaseCmd                    = 61
  76. };
  77.  
  78. enum  {
  79.     soundCmd                    = 80,
  80.     bufferCmd                    = 81,
  81.     rateCmd                        = 82,
  82.     continueCmd                    = 83,
  83.     doubleBufferCmd                = 84,
  84.     getRateCmd                    = 85,
  85.     sizeCmd                        = 90,
  86.     convertCmd                    = 91,
  87.     stdQLength                    = 128,
  88.     dataOffsetFlag                = 0x8000,
  89. /*channel initialization parameters*/
  90.     waveInitChannelMask            = 0x07,
  91.     waveInitChannel0            = 0x04,                            /*wave table only, Sound Manager 2.0 and earlier*/
  92.     waveInitChannel1            = 0x05,                            /*wave table only, Sound Manager 2.0 and earlier*/
  93.     waveInitChannel2            = 0x06,                            /*wave table only, Sound Manager 2.0 and earlier*/
  94.     waveInitChannel3            = 0x07,                            /*wave table only, Sound Manager 2.0 and earlier*/
  95.     initChan0                    = waveInitChannel0,                /*obsolete spelling*/
  96.     initChan1                    = waveInitChannel1,                /*obsolete spelling*/
  97.     initChan2                    = waveInitChannel2,                /*obsolete spelling*/
  98.     initChan3                    = waveInitChannel3,                /*obsolete spelling*/
  99.     initPanMask                    = 0x0003,                        /*mask for right/left pan values*/
  100.     initSRateMask                = 0x0030,                        /*mask for sample rate values*/
  101.     initStereoMask                = 0x00C0,                        /*mask for mono/stereo values*/
  102.     initCompMask                = 0xFF00                        /*mask for compression IDs*/
  103. };
  104.  
  105. enum  {
  106.     initChanLeft                = 0x0002,                        /*left stereo channel*/
  107.     initChanRight                = 0x0003,                        /*right stereo channel*/
  108.     initNoInterp                = 0x0004,                        /*no linear interpolation*/
  109.     initNoDrop                    = 0x0008,                        /*no drop-sample conversion*/
  110.     initMono                    = 0x0080,                        /*monophonic channel*/
  111.     initStereo                    = 0x00C0,                        /*stereo channel*/
  112.     initMACE3                    = 0x0300,                        /*MACE 3:1*/
  113.     initMACE6                    = 0x0400,                        /*MACE 6:1*/
  114.     kUseOptionalOutputDevice    = -1,                            /*only for Sound Manager 3.0 or later*/
  115.     stdSH                        = 0x00,                            /*Standard sound header encode value*/
  116.     extSH                        = 0xFF,                            /*Extended sound header encode value*/
  117.     cmpSH                        = 0xFE,                            /*Compressed sound header encode value*/
  118.     notCompressed                = 0,                            /*compression ID's*/
  119.     fixedCompression            = -1,                            /*compression ID for fixed-sized compression*/
  120.     variableCompression            = -2,                            /*compression ID for variable-sized compression*/
  121.     twoToOne                    = 1,
  122.     eightToThree                = 2,
  123.     threeToOne                    = 3,
  124.     sixToOne                    = 4,
  125.     outsideCmpSH                = 0                                /*MACE constants*/
  126. };
  127.  
  128. enum  {
  129.     insideCmpSH                    = 1,
  130.     aceSuccess                    = 0,
  131.     aceMemFull                    = 1,
  132.     aceNilBlock                    = 2,
  133.     aceBadComp                    = 3,
  134.     aceBadEncode                = 4,
  135.     aceBadDest                    = 5,
  136.     aceBadCmd                    = 6,
  137.     sixToOnePacketSize            = 8,
  138.     threeToOnePacketSize        = 16,
  139.     stateBlockSize                = 64,
  140.     leftOverBlockSize            = 32,
  141.     firstSoundFormat            = 0x0001,                        /*general sound format*/
  142.     secondSoundFormat            = 0x0002,                        /*special sampled sound format (HyperCard)*/
  143.     dbBufferReady                = 0x00000001,                    /*double buffer is filled*/
  144.     dbLastBuffer                = 0x00000004,                    /*last double buffer to play*/
  145.     sysBeepDisable                = 0x0000,                        /*SysBeep() enable flags*/
  146.     sysBeepEnable                = 0x0001,
  147.     unitTypeNoSelection            = 0xFFFF,                        /*unitTypes for AudioSelection.unitType*/
  148.     unitTypeSeconds                = 0x0000
  149. };
  150.  
  151.  
  152. /*Structures for Sound Driver*/
  153.  
  154. typedef unsigned char FreeWave[30001];
  155.  
  156. #if defined(powerc) || defined (__powerc)
  157. #pragma options align=mac68k
  158. #endif
  159. struct FFSynthRec {
  160.     short                        mode;
  161.     Fixed                        count;
  162.     FreeWave                    waveBytes;
  163. };
  164. #if defined(powerc) || defined(__powerc)
  165. #pragma options align=reset
  166. #endif
  167.  
  168. typedef struct FFSynthRec FFSynthRec;
  169.  
  170. typedef FFSynthRec *FFSynthPtr;
  171.  
  172. #if defined(powerc) || defined (__powerc)
  173. #pragma options align=mac68k
  174. #endif
  175. struct Tone {
  176.     short                        count;
  177.     short                        amplitude;
  178.     short                        duration;
  179. };
  180. #if defined(powerc) || defined(__powerc)
  181. #pragma options align=reset
  182. #endif
  183.  
  184. typedef struct Tone Tone;
  185.  
  186. typedef Tone Tones[5001];
  187.  
  188. #if defined(powerc) || defined (__powerc)
  189. #pragma options align=mac68k
  190. #endif
  191. struct SWSynthRec {
  192.     short                        mode;
  193.     Tones                        triplets;
  194. };
  195. #if defined(powerc) || defined(__powerc)
  196. #pragma options align=reset
  197. #endif
  198.  
  199. typedef struct SWSynthRec SWSynthRec;
  200.  
  201. typedef SWSynthRec *SWSynthPtr;
  202.  
  203. typedef unsigned char Wave[256];
  204.  
  205. typedef Wave *WavePtr;
  206.  
  207. #if defined(powerc) || defined (__powerc)
  208. #pragma options align=mac68k
  209. #endif
  210. struct FTSoundRec {
  211.     short                        duration;
  212.     Fixed                        sound1Rate;
  213.     long                        sound1Phase;
  214.     Fixed                        sound2Rate;
  215.     long                        sound2Phase;
  216.     Fixed                        sound3Rate;
  217.     long                        sound3Phase;
  218.     Fixed                        sound4Rate;
  219.     long                        sound4Phase;
  220.     WavePtr                        sound1Wave;
  221.     WavePtr                        sound2Wave;
  222.     WavePtr                        sound3Wave;
  223.     WavePtr                        sound4Wave;
  224. };
  225. #if defined(powerc) || defined(__powerc)
  226. #pragma options align=reset
  227. #endif
  228.  
  229. typedef struct FTSoundRec FTSoundRec;
  230.  
  231. typedef FTSoundRec *FTSndRecPtr;
  232.  
  233. #if defined(powerc) || defined (__powerc)
  234. #pragma options align=mac68k
  235. #endif
  236. struct FTSynthRec {
  237.     short                        mode;
  238.     FTSndRecPtr                    sndRec;
  239. };
  240. #if defined(powerc) || defined(__powerc)
  241. #pragma options align=reset
  242. #endif
  243.  
  244. typedef struct FTSynthRec FTSynthRec;
  245.  
  246. typedef FTSynthRec *FTSynthPtr;
  247.  
  248. typedef pascal void (*SndCompletionProcPtr)(void);
  249.  
  250. enum {
  251.     uppSndCompletionProcInfo = kPascalStackBased
  252. };
  253.  
  254. #if USESROUTINEDESCRIPTORS
  255. typedef UniversalProcPtr SndCompletionUPP;
  256.  
  257. #define CallSndCompletionProc(userRoutine)        \
  258.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSndCompletionProcInfo)
  259. #define NewSndCompletionProc(userRoutine)        \
  260.         (SndCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSndCompletionProcInfo, GetCurrentISA())
  261. #else
  262. typedef SndCompletionProcPtr SndCompletionUPP;
  263.  
  264. #define CallSndCompletionProc(userRoutine)        \
  265.         (*(userRoutine))()
  266. #define NewSndCompletionProc(userRoutine)        \
  267.         (SndCompletionUPP)(userRoutine)
  268. #endif
  269.  
  270.  
  271. /*Structures for Sound Manager*/
  272.  
  273. #if defined(powerc) || defined (__powerc)
  274. #pragma options align=mac68k
  275. #endif
  276. struct SndCommand {
  277.     unsigned short                cmd;
  278.     short                        param1;
  279.     long                        param2;
  280. };
  281. #if defined(powerc) || defined(__powerc)
  282. #pragma options align=reset
  283. #endif
  284.  
  285. typedef struct SndCommand SndCommand;
  286.  
  287. typedef struct SndChannel SndChannel;
  288.  
  289. typedef SndChannel *SndChannelPtr;
  290.  
  291. typedef pascal void (*SndCallBackProcPtr)(SndChannelPtr chan, SndCommand *cmd);
  292.  
  293. enum {
  294.     uppSndCallBackProcInfo = kPascalStackBased
  295.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SndChannelPtr)))
  296.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SndCommand*)))
  297. };
  298.  
  299. #if USESROUTINEDESCRIPTORS
  300. typedef UniversalProcPtr SndCallBackUPP;
  301.  
  302. #define CallSndCallBackProc(userRoutine, chan, cmd)        \
  303.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSndCallBackProcInfo, (chan), (cmd))
  304. #define NewSndCallBackProc(userRoutine)        \
  305.         (SndCallBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSndCallBackProcInfo, GetCurrentISA())
  306. #else
  307. typedef SndCallBackProcPtr SndCallBackUPP;
  308.  
  309. #define CallSndCallBackProc(userRoutine, chan, cmd)        \
  310.         (*(userRoutine))((chan), (cmd))
  311. #define NewSndCallBackProc(userRoutine)        \
  312.         (SndCallBackUPP)(userRoutine)
  313. #endif
  314.  
  315. #if defined(powerc) || defined (__powerc)
  316. #pragma options align=mac68k
  317. #endif
  318. struct SndChannel {
  319.     struct SndChannel            *nextChan;
  320.     Ptr                            firstMod;                        /* reserved for the Sound Manager */
  321.     SndCallBackUPP                callBack;
  322.     long                        userInfo;
  323.     long                        wait;                            /* The following is for internal Sound Manager use only.*/
  324.     SndCommand                    cmdInProgress;
  325.     short                        flags;
  326.     short                        qLength;
  327.     short                        qHead;
  328.     short                        qTail;
  329.     SndCommand                    queue[stdQLength];
  330. };
  331. #if defined(powerc) || defined(__powerc)
  332. #pragma options align=reset
  333. #endif
  334.  
  335.  
  336. /*MACE structures*/
  337.  
  338. #if defined(powerc) || defined (__powerc)
  339. #pragma options align=mac68k
  340. #endif
  341. struct StateBlock {
  342.     short                        stateVar[stateBlockSize];
  343. };
  344. #if defined(powerc) || defined(__powerc)
  345. #pragma options align=reset
  346. #endif
  347.  
  348. typedef struct StateBlock StateBlock;
  349.  
  350. typedef StateBlock *StateBlockPtr;
  351.  
  352. #if defined(powerc) || defined (__powerc)
  353. #pragma options align=mac68k
  354. #endif
  355. struct LeftOverBlock {
  356.     unsigned long                count;
  357.     char                        sampleArea[leftOverBlockSize];
  358. };
  359. #if defined(powerc) || defined(__powerc)
  360. #pragma options align=reset
  361. #endif
  362.  
  363. typedef struct LeftOverBlock LeftOverBlock;
  364.  
  365. typedef LeftOverBlock *LeftOverBlockPtr;
  366.  
  367. #if defined(powerc) || defined (__powerc)
  368. #pragma options align=mac68k
  369. #endif
  370. struct ModRef {
  371.     unsigned short                modNumber;
  372.     long                        modInit;
  373. };
  374. #if defined(powerc) || defined(__powerc)
  375. #pragma options align=reset
  376. #endif
  377.  
  378. typedef struct ModRef ModRef;
  379.  
  380. #if defined(powerc) || defined (__powerc)
  381. #pragma options align=mac68k
  382. #endif
  383. struct SndListResource {
  384.     short                        format;
  385.     short                        numModifiers;
  386.     ModRef                        modifierPart[1];                /*This is a variable length array*/
  387.     short                        numCommands;
  388.     SndCommand                    commandPart[1];                    /*This is a variable length array*/
  389.     char                        dataPart[1];                    /*This is a variable length array*/
  390. };
  391. #if defined(powerc) || defined(__powerc)
  392. #pragma options align=reset
  393. #endif
  394.  
  395. typedef struct SndListResource SndListResource;
  396.  
  397. typedef SndListResource *SndListPtr;
  398.  
  399. typedef SndListPtr *SndListHndl;
  400.  
  401.  
  402. /*HyperCard sound resource format*/
  403.  
  404. #if defined(powerc) || defined (__powerc)
  405. #pragma options align=mac68k
  406. #endif
  407. struct Snd2ListResource {
  408.     short                        format;
  409.     short                        refCount;
  410.     short                        numCommands;
  411.     SndCommand                    commandPart[1];                    /*This is a variable length array*/
  412.     char                        dataPart[1];                    /*This is a variable length array*/
  413. };
  414. #if defined(powerc) || defined(__powerc)
  415. #pragma options align=reset
  416. #endif
  417.  
  418. typedef struct Snd2ListResource Snd2ListResource;
  419.  
  420. typedef Snd2ListResource *Snd2ListPtr;
  421.  
  422. typedef Snd2ListPtr *Snd2ListHndl;
  423.  
  424. #if defined(powerc) || defined (__powerc)
  425. #pragma options align=mac68k
  426. #endif
  427. struct SoundHeader {
  428.     Ptr                            samplePtr;                        /*if NIL then samples are in sampleArea*/
  429.     unsigned long                length;                            /*length of sound in bytes*/
  430.     Fixed                        sampleRate;                        /*sample rate for this sound*/
  431.     unsigned long                loopStart;                        /*start of looping portion*/
  432.     unsigned long                loopEnd;                        /*end of looping portion*/
  433.     unsigned char                encode;                            /*header encoding*/
  434.     unsigned char                baseFrequency;                    /*baseFrequency value*/
  435.     unsigned char                sampleArea[1];                    /*space for when samples follow directly*/
  436. };
  437. #if defined(powerc) || defined(__powerc)
  438. #pragma options align=reset
  439. #endif
  440.  
  441. typedef struct SoundHeader SoundHeader;
  442.  
  443. typedef SoundHeader *SoundHeaderPtr;
  444.  
  445. #if defined(powerc) || defined (__powerc)
  446. #pragma options align=mac68k
  447. #endif
  448. struct CmpSoundHeader {
  449.     Ptr                            samplePtr;                        /*if nil then samples are in sample area*/
  450.     unsigned long                numChannels;                    /*number of channels i.e. mono = 1*/
  451.     Fixed                        sampleRate;                        /*sample rate in Apples Fixed point representation*/
  452.     unsigned long                loopStart;                        /*loopStart of sound before compression*/
  453.     unsigned long                loopEnd;                        /*loopEnd of sound before compression*/
  454.     unsigned char                encode;                            /*data structure used , stdSH, extSH, or cmpSH*/
  455.     unsigned char                baseFrequency;                    /*same meaning as regular SoundHeader*/
  456.     unsigned long                numFrames;                        /*length in frames ( packetFrames or sampleFrames )*/
  457.     extended80                    AIFFSampleRate;                    /*IEEE sample rate*/
  458.     Ptr                            markerChunk;                    /*sync track*/
  459.     OSType                        format;                            /*data format type, was futureUse1*/
  460.     unsigned long                futureUse2;                        /*reserved by Apple*/
  461.     StateBlockPtr                stateVars;                        /*pointer to State Block*/
  462.     LeftOverBlockPtr            leftOverSamples;                /*used to save truncated samples between compression calls*/
  463.     unsigned short                compressionID;                    /*0 means no compression, non zero means compressionID*/
  464.     unsigned short                packetSize;                        /*number of bits in compressed sample packet*/
  465.     unsigned short                snthID;                            /*resource ID of Sound Manager snth that contains NRT C/E*/
  466.     unsigned short                sampleSize;                        /*number of bits in non-compressed sample*/
  467.     unsigned char                sampleArea[1];                    /*space for when samples follow directly*/
  468. };
  469. #if defined(powerc) || defined(__powerc)
  470. #pragma options align=reset
  471. #endif
  472.  
  473. typedef struct CmpSoundHeader CmpSoundHeader;
  474.  
  475. typedef CmpSoundHeader *CmpSoundHeaderPtr;
  476.  
  477. #if defined(powerc) || defined (__powerc)
  478. #pragma options align=mac68k
  479. #endif
  480. struct ExtSoundHeader {
  481.     Ptr                            samplePtr;                        /*if nil then samples are in sample area*/
  482.     unsigned long                numChannels;                    /*number of channels,  ie mono = 1*/
  483.     Fixed                        sampleRate;                        /*sample rate in Apples Fixed point representation*/
  484.     unsigned long                loopStart;                        /*same meaning as regular SoundHeader*/
  485.     unsigned long                loopEnd;                        /*same meaning as regular SoundHeader*/
  486.     unsigned char                encode;                            /*data structure used , stdSH, extSH, or cmpSH*/
  487.     unsigned char                baseFrequency;                    /*same meaning as regular SoundHeader*/
  488.     unsigned long                numFrames;                        /*length in total number of frames*/
  489.     extended80                    AIFFSampleRate;                    /*IEEE sample rate*/
  490.     Ptr                            markerChunk;                    /*sync track*/
  491.     Ptr                            instrumentChunks;                /*AIFF instrument chunks*/
  492.     Ptr                            AESRecording;
  493.     unsigned short                sampleSize;                        /*number of bits in sample*/
  494.     unsigned short                futureUse1;                        /*reserved by Apple*/
  495.     unsigned long                futureUse2;                        /*reserved by Apple*/
  496.     unsigned long                futureUse3;                        /*reserved by Apple*/
  497.     unsigned long                futureUse4;                        /*reserved by Apple*/
  498.     unsigned char                sampleArea[1];                    /*space for when samples follow directly*/
  499. };
  500. #if defined(powerc) || defined(__powerc)
  501. #pragma options align=reset
  502. #endif
  503.  
  504. typedef struct ExtSoundHeader ExtSoundHeader;
  505.  
  506. typedef ExtSoundHeader *ExtSoundHeaderPtr;
  507.  
  508. #if defined(powerc) || defined (__powerc)
  509. #pragma options align=mac68k
  510. #endif
  511. struct ConversionBlock {
  512.     short                        destination;
  513.     short                        unused;
  514.     CmpSoundHeaderPtr            inputPtr;
  515.     CmpSoundHeaderPtr            outputPtr;
  516. };
  517. #if defined(powerc) || defined(__powerc)
  518. #pragma options align=reset
  519. #endif
  520.  
  521. typedef struct ConversionBlock ConversionBlock;
  522.  
  523. typedef ConversionBlock *ConversionBlockPtr;
  524.  
  525. #if defined(powerc) || defined (__powerc)
  526. #pragma options align=mac68k
  527. #endif
  528. struct SMStatus {
  529.     short                        smMaxCPULoad;
  530.     short                        smNumChannels;
  531.     short                        smCurCPULoad;
  532. };
  533. #if defined(powerc) || defined(__powerc)
  534. #pragma options align=reset
  535. #endif
  536.  
  537. typedef struct SMStatus SMStatus;
  538.  
  539. typedef SMStatus *SMStatusPtr;
  540.  
  541. #if defined(powerc) || defined (__powerc)
  542. #pragma options align=mac68k
  543. #endif
  544. struct SCStatus {
  545.     Fixed                        scStartTime;
  546.     Fixed                        scEndTime;
  547.     Fixed                        scCurrentTime;
  548.     Boolean                        scChannelBusy;
  549.     Boolean                        scChannelDisposed;
  550.     Boolean                        scChannelPaused;
  551.     Boolean                        scUnused;
  552.     unsigned long                scChannelAttributes;
  553.     long                        scCPULoad;
  554. };
  555. #if defined(powerc) || defined(__powerc)
  556. #pragma options align=reset
  557. #endif
  558.  
  559. typedef struct SCStatus SCStatus;
  560.  
  561. typedef SCStatus *SCStatusPtr;
  562.  
  563. #if defined(powerc) || defined (__powerc)
  564. #pragma options align=mac68k
  565. #endif
  566. struct AudioSelection {
  567.     long                        unitType;
  568.     Fixed                        selStart;
  569.     Fixed                        selEnd;
  570. };
  571. #if defined(powerc) || defined(__powerc)
  572. #pragma options align=reset
  573. #endif
  574.  
  575. typedef pascal void (*FilePlayCompletionProcPtr)(SndChannelPtr chan);
  576.  
  577. enum {
  578.     uppFilePlayCompletionProcInfo = kPascalStackBased
  579.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SndChannelPtr)))
  580. };
  581.  
  582. #if USESROUTINEDESCRIPTORS
  583. typedef UniversalProcPtr FilePlayCompletionUPP;
  584.  
  585. #define CallFilePlayCompletionProc(userRoutine, chan)        \
  586.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppFilePlayCompletionProcInfo, (chan))
  587. #define NewFilePlayCompletionProc(userRoutine)        \
  588.         (FilePlayCompletionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppFilePlayCompletionProcInfo, GetCurrentISA())
  589. #else
  590. typedef FilePlayCompletionProcPtr FilePlayCompletionUPP;
  591.  
  592. #define CallFilePlayCompletionProc(userRoutine, chan)        \
  593.         (*(userRoutine))((chan))
  594. #define NewFilePlayCompletionProc(userRoutine)        \
  595.         (FilePlayCompletionUPP)(userRoutine)
  596. #endif
  597.  
  598. typedef struct AudioSelection AudioSelection;
  599.  
  600. typedef AudioSelection *AudioSelectionPtr;
  601.  
  602. #if defined(powerc) || defined (__powerc)
  603. #pragma options align=mac68k
  604. #endif
  605. struct SndDoubleBuffer {
  606.     long                        dbNumFrames;
  607.     long                        dbFlags;
  608.     long                        dbUserInfo[2];
  609.     char                        dbSoundData[1];
  610. };
  611. #if defined(powerc) || defined(__powerc)
  612. #pragma options align=reset
  613. #endif
  614.  
  615. typedef struct SndDoubleBuffer SndDoubleBuffer;
  616.  
  617. typedef SndDoubleBuffer *SndDoubleBufferPtr;
  618.  
  619. typedef pascal void (*SndDoubleBackProcPtr)(SndChannelPtr channel, SndDoubleBufferPtr doubleBufferPtr);
  620.  
  621. enum {
  622.     uppSndDoubleBackProcInfo = kPascalStackBased
  623.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(SndChannelPtr)))
  624.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(SndDoubleBufferPtr)))
  625. };
  626.  
  627. #if USESROUTINEDESCRIPTORS
  628. typedef UniversalProcPtr SndDoubleBackUPP;
  629.  
  630. #define CallSndDoubleBackProc(userRoutine, channel, doubleBufferPtr)        \
  631.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppSndDoubleBackProcInfo, (channel), (doubleBufferPtr))
  632. #define NewSndDoubleBackProc(userRoutine)        \
  633.         (SndDoubleBackUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppSndDoubleBackProcInfo, GetCurrentISA())
  634. #else
  635. typedef SndDoubleBackProcPtr SndDoubleBackUPP;
  636.  
  637. #define CallSndDoubleBackProc(userRoutine, channel, doubleBufferPtr)        \
  638.         (*(userRoutine))((channel), (doubleBufferPtr))
  639. #define NewSndDoubleBackProc(userRoutine)        \
  640.         (SndDoubleBackUPP)(userRoutine)
  641. #endif
  642.  
  643. #if defined(powerc) || defined (__powerc)
  644. #pragma options align=mac68k
  645. #endif
  646. struct SndDoubleBufferHeader {
  647.     short                        dbhNumChannels;
  648.     short                        dbhSampleSize;
  649.     short                        dbhCompressionID;
  650.     short                        dbhPacketSize;
  651.     Fixed                        dbhSampleRate;
  652.     SndDoubleBufferPtr            dbhBufferPtr[2];
  653.     SndDoubleBackUPP            dbhDoubleBack;
  654. };
  655. #if defined(powerc) || defined(__powerc)
  656. #pragma options align=reset
  657. #endif
  658.  
  659. typedef struct SndDoubleBufferHeader SndDoubleBufferHeader;
  660.  
  661. typedef SndDoubleBufferHeader *SndDoubleBufferHeaderPtr;
  662.  
  663. #if defined(powerc) || defined (__powerc)
  664. #pragma options align=mac68k
  665. #endif
  666. struct SndDoubleBufferHeader2 {
  667.     short                        dbhNumChannels;
  668.     short                        dbhSampleSize;
  669.     short                        dbhCompressionID;
  670.     short                        dbhPacketSize;
  671.     Fixed                        dbhSampleRate;
  672.     SndDoubleBufferPtr            dbhBufferPtr[2];
  673.     SndDoubleBackUPP            dbhDoubleBack;
  674.     OSType                        dbhFormat;
  675. };
  676. #if defined(powerc) || defined(__powerc)
  677. #pragma options align=reset
  678. #endif
  679.  
  680. typedef struct SndDoubleBufferHeader2 SndDoubleBufferHeader2;
  681.  
  682. typedef SndDoubleBufferHeader2 *SndDoubleBufferHeader2Ptr;
  683.  
  684. #ifdef __cplusplus
  685. extern "C" {
  686. #endif
  687.  
  688. extern pascal OSErr SndDoCommand(SndChannelPtr chan, const SndCommand *cmd, Boolean noWait)
  689.  ONEWORDINLINE(0xA803);
  690. extern pascal OSErr SndDoImmediate(SndChannelPtr chan, const SndCommand *cmd)
  691.  ONEWORDINLINE(0xA804);
  692. extern pascal OSErr SndNewChannel(SndChannelPtr *chan, short synth, long init, SndCallBackUPP userRoutine)
  693.  ONEWORDINLINE(0xA807);
  694. extern pascal OSErr SndDisposeChannel(SndChannelPtr chan, Boolean quietNow)
  695.  ONEWORDINLINE(0xA801);
  696. extern pascal OSErr SndPlay(SndChannelPtr chan, Handle sndHdl, Boolean async)
  697.  ONEWORDINLINE(0xA805);
  698. extern pascal OSErr SndAddModifier(SndChannelPtr chan, Ptr modifier, short id, long init)
  699.  ONEWORDINLINE(0xA802);
  700. extern pascal OSErr SndControl(short id, SndCommand *cmd)
  701.  ONEWORDINLINE(0xA806);
  702. extern pascal void SetSoundVol(short level);
  703.  
  704. #if USES68KINLINES
  705. #pragma parameter  GetSoundVol(__A0)
  706. #endif
  707. extern pascal void GetSoundVol(short *level)
  708.  THREEWORDINLINE(0x4218, 0x10B8, 0x0260);
  709. extern pascal NumVersion SndSoundManagerVersion(void)
  710.  FOURWORDINLINE(0x203C, 0x000C, 0x0008, 0xA800);
  711. extern pascal OSErr SndStartFilePlay(SndChannelPtr chan, short fRefNum, short resNum, long bufferSize, void *theBuffer, AudioSelectionPtr theSelection, FilePlayCompletionUPP theCompletion, Boolean async)
  712.  FOURWORDINLINE(0x203C, 0x0D00, 0x0008, 0xA800);
  713. extern pascal OSErr SndPauseFilePlay(SndChannelPtr chan)
  714.  FOURWORDINLINE(0x203C, 0x0204, 0x0008, 0xA800);
  715. extern pascal OSErr SndStopFilePlay(SndChannelPtr chan, Boolean quietNow)
  716.  FOURWORDINLINE(0x203C, 0x0308, 0x0008, 0xA800);
  717. extern pascal OSErr SndChannelStatus(SndChannelPtr chan, short theLength, SCStatusPtr theStatus)
  718.  FOURWORDINLINE(0x203C, 0x0010, 0x0008, 0xA800);
  719. extern pascal OSErr SndManagerStatus(short theLength, SMStatusPtr theStatus)
  720.  FOURWORDINLINE(0x203C, 0x0014, 0x0008, 0xA800);
  721. extern pascal void SndGetSysBeepState(short *sysBeepState)
  722.  FOURWORDINLINE(0x203C, 0x0018, 0x0008, 0xA800);
  723. extern pascal OSErr SndSetSysBeepState(short sysBeepState)
  724.  FOURWORDINLINE(0x203C, 0x001C, 0x0008, 0xA800);
  725. extern pascal OSErr SndPlayDoubleBuffer(SndChannelPtr chan, SndDoubleBufferHeaderPtr theParams)
  726.  FOURWORDINLINE(0x203C, 0x0020, 0x0008, 0xA800);
  727. extern pascal NumVersion MACEVersion(void)
  728.  FOURWORDINLINE(0x203C, 0x0000, 0x0010, 0xA800);
  729. extern pascal void Comp3to1(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  730.  FOURWORDINLINE(0x203C, 0x0004, 0x0010, 0xA800);
  731. extern pascal void Exp1to3(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  732.  FOURWORDINLINE(0x203C, 0x0008, 0x0010, 0xA800);
  733. extern pascal void Comp6to1(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  734.  FOURWORDINLINE(0x203C, 0x000C, 0x0010, 0xA800);
  735. extern pascal void Exp1to6(const void *inBuffer, void *outBuffer, unsigned long cnt, const void *inState, void *outState, unsigned long numChannels, unsigned long whichChannel)
  736.  FOURWORDINLINE(0x203C, 0x0010, 0x0010, 0xA800);
  737.  
  738. /*Sound Manager 3.0 and later calls*/
  739.  
  740. extern pascal OSErr GetSysBeepVolume(long *level)
  741.  FOURWORDINLINE(0x203C, 0x0224, 0x0018, 0xA800);
  742. extern pascal OSErr SetSysBeepVolume(long level)
  743.  FOURWORDINLINE(0x203C, 0x0228, 0x0018, 0xA800);
  744. extern pascal OSErr GetDefaultOutputVolume(long *level)
  745.  FOURWORDINLINE(0x203C, 0x022C, 0x0018, 0xA800);
  746. extern pascal OSErr SetDefaultOutputVolume(long level)
  747.  FOURWORDINLINE(0x203C, 0x0230, 0x0018, 0xA800);
  748. extern pascal OSErr GetSoundHeaderOffset(Handle sndHandle, long *offset)
  749.  FOURWORDINLINE(0x203C, 0x0404, 0x0018, 0xA800);
  750. #ifdef __cplusplus
  751. }
  752. #endif
  753.  
  754. #endif
  755.  
  756.